home *** CD-ROM | disk | FTP | other *** search
- 10 CLS
- 15 KEY OFF
- 30 REM ** HOME BUDGETING/CASHFLOW ANALYSIS *** PRINTING VERSION
- 31 REM ***********************************************************
- 35 PRINT"THIS IS THE PRINTING VERSION OF HOME BUDGETING/CASHFLOW ANALYSIS"
- 36 PRINT:PRINT"PLEASE SEE THAT THE PRINTER IS READY"
- 40 DEFDBL A-Y:DEFINT Z
- 50 DIM D(12),I0(10,2),C0(10,3),C1(10,5),C1$(10),E0(25,2)
- 55 LPRINT
- 60 PU$="$$####,###.##"
- 69 REM ***********************************************************
- 70 REM ** D() DAY OFFSET FACTORS
- 80 REM ** I0() SALARIED INCOME
- 90 REM ** C1() CREDIT EXPENSES
- 100 REM ** E0() EXPENSES
- 110 REM ** C1$()DESCRIPTIONS OF CREDIT CARDS
- 120 REM ** C0() FIXED-TERM LOANS
- 121 REM ***********************************************************
- 130 DATA "MORTGAGE","CAR LOAN","OTHER LOAN"
- 140 REM ** EXPENSES
- 141 REM ***********************************************************
- 150 DATA "PROPERTY TAX","RENT"
- 160 DATA "LIFE INSURANCE","HOUSE INSURANCE","CAR INSURANCE"
- 170 DATA "TELEPHONE","GAS & ELECTRIC","WATER","TRASH PICKUP"
- 180 DATA "GROCERIES","CLOTHING","PHYSICIAN","DENTIST"
- 190 DATA "DRUGS","TUITION","CHILD CARE","GAS/OIL"
- 200 DATA "AUTO REPAIR","COMMUTING","MEDICAL PLAN"
- 210 DATA "HOME REPAIR","RESTAURANTS","MOVIES/CONCERTS"
- 220 DATA "SUBSCRIPTIONS","MISCELLANEOUS"
- 230 D(1)=31
- 240 D(2)=28
- 250 D(3)=31
- 260 D(4)=30
- 270 D(5)=31
- 280 D(6)=30
- 290 D(7)=31
- 300 D(8)=31
- 310 D(9)=30
- 320 D(10)=31
- 330 D(11)=30
- 340 D(12)=31
- 350 D$="SATSUNMONTUEWEDTHUFRI"
- 360 LPRINT"HOME BUDGETING/CASHFLOW MODEL ";DATE$
- 370 LPRINT:LPRINT:LPRINT
- 380 LPRINT SPC(10)"DATE TO START ANALYSIS FROM: "
- 381 PRINT SPC(10)"DATE TO START ANALYSIS FROM: "
- 390 GOSUB 3180
- 400 D1=D2
- 410 Y1=Y
- 420 M1=M
- 430 D4=Y*10000+M*100+D2
- 440 LPRINT
- 450 REM ** ENTER INCOMES -- AMOUNTS & FREQUENCY
- 451 REM ***********************************************************
- 460 ZI2=0
- 470 X$="INCOME"
- 480 LPRINT "-----------NET SALARY";ZI2+1;"-------------------"
- 481 PRINT "-----------NET SALARY";ZI2+1;"-------------------"
- 490 GOSUB 2530
- 500 IF A2(1)=0 THEN 550
- 510 ZI2=ZI2+1
- 520 I0(ZI2,1)=A2(1)
- 530 I0(ZI2,2)=A2(2)
- 540 GOTO 480
- 550 PRINT
- 560 REM ** ENTER SECURED LOANS
- 561 REM ***********************************************************
- 570 FOR ZI=1 TO 3
- 580 READ X$
- 590 LPRINT
- 600 GOSUB 2530
- 610 IF A2(1)=0 THEN 680
- 620 IF A2(1)<0 THEN 590
- 630 C0(ZI,1)=A2(1)
- 640 C0(ZI,2)=A2(2)
- 650 PRINT SPC(23)"CURRENT BALANCE";
- 651 LPRINT SPC(23)"CURRENT BALANCE";
- 660 INPUT C0(ZI,3):LPRINT C0(ZI,3)
- 670 IF C0(ZI,3)<1 THEN 600
- 680 NEXT ZI
- 689 REM ***********************************************************
- 690 REM ** ENTER CREDIT CARDS AND DESCRIPTIONS
- 700 REM ** MONTHLY PAYMENTS ARE ASSUMED
- 701 REM ***********************************************************
- 710 LPRINT
- 720 ZK=1
- 730 GOSUB 2170
- 740 IF C1$(ZK)<="" THEN 770
- 750 ZK=ZK+1
- 760 GOTO 730
- 770 C4=ZK-1
- 780 REM ** ENTER EXPENSES
- 781 REM ***********************************************************
- 790 FOR ZK=1 TO 25
- 800 LPRINT
- 810 READ X$
- 820 GOSUB 2530
- 830 E0(ZK,1)=A2(1)
- 840 E0(ZK,2)=A2(2)
- 850 NEXT ZK
- 860 REM ** INPUT PRESENT CASH RESERVES
- 861 REM ***********************************************************
- 870 PRINT SPC(20)"ENTER CASH ON HAND";
- 871 LPRINT SPC(20)"ENTER CASH ON HAND";
- 880 INPUT B0:LPRINT B0
- 890 REM ** BEGIN ANALYSIS
- 891 REM ***********************************************************
- 900 LPRINT : LPRINT CHR$(12)
- 910 PRINT SPC(6)"CASH FLOWS FOR ";:PRINT USING "##/##";M1, Y1
- 911 LPRINT SPC(6)"CASH FLOWS FOR ";:LPRINT USING "##/##";M1, Y1
- 920 PRINT SPC(6)"OPENING CASH BALANCE ";TAB(37):PRINT USING PU$; B0
- 921 LPRINT SPC(6)"OPENING CASH BALANCE ";TAB(37):LPRINT USING PU$; B0
- 930 E1=0
- 940 I1=0
- 950 FOR ZK1=D1 TO D(M1)
- 960 RESTORE
- 970 FOR ZJ= 1 TO ZI2
- 980 REM ** CHECK FOR INCOME
- 981 REM ***********************************************************
- 990 IF INT(I0(ZJ,2))>D4 THEN 1110
- 1000 B0=B0+I0(ZJ,1)
- 1010 I1=I1+I0(ZJ,1)
- 1020 M=M1
- 1030 D2=D1
- 1040 Y=Y1
- 1050 D3=INT((I0(ZJ,2)-INT(I0(ZJ,2)))*100+.5)
- 1060 A2(1)=D3/100
- 1070 GOSUB 2680
- 1080 I0(ZJ,2)=A2(1)+Y*10000+M*100+D2
- 1090 LPRINT USING "\ \ ## INCOME ##";A$; D1; ZJ;
- 1100 LPRINT TAB(26):LPRINT USING PU$; I0(ZJ,1)
- 1110 NEXT ZJ
- 1120 REM ** CALCULATE OUTFLOWS FOR FIXED-TERM LOANS
- 1121 REM ***********************************************************
- 1130 FOR ZJ=1 TO 3
- 1140 READ X$
- 1150 IF C0(ZJ,3)=0 THEN 1260
- 1160 IF INT(C0(ZJ,2))>D4 THEN 1260
- 1170 IF C0(ZJ,3)>C0(ZJ,1) THEN 1190
- 1180 C0(ZJ,1)=C0(ZJ,3)
- 1190 A2(1)=C0(ZJ,1)
- 1200 A2(2)=C0(ZJ,2)
- 1210 GOSUB 1790
- 1220 C0(ZJ,2)=(C0(ZJ,2)-INT(C0(ZJ,2)))+Y*10000+M*100+D2
- 1230 LPRINT USING "\ \ ## & PAYMENT"; A$; D1; X$;
- 1240 LPRINT TAB(50):LPRINT USING PU$; -1*A2(1)
- 1250 C0(ZJ,3)=C0(ZJ,3)-A2(1)
- 1260 NEXT ZJ
- 1270 REM ** CALCULATE OUTFLOWS FOR CHARGE CARDS
- 1271 REM ***********************************************************
- 1280 FOR ZJ=1 TO C4
- 1290 IF C1(ZJ,5)>D4 THEN 1410
- 1300 IF C1(ZJ,2)=0 THEN 1410
- 1310 IF C1(ZJ,2)>C1(ZJ,4) THEN 1330
- 1320 C1(ZJ,4)=C1(ZJ,2)
- 1330 A2(1)=C1(ZJ,4)
- 1340 A2(2)=C1(ZJ,5)+.12
- 1350 X$=C1$(ZJ)
- 1360 GOSUB 1790
- 1370 LPRINT USING "\ \ ## & ";A$; D1; C1$(ZJ);
- 1380 LPRINT TAB(50):LPRINT USING PU$; -1*A2(1)
- 1390 C1(ZJ,2)=C1(ZJ,2)-A2(1)
- 1400 C1(ZJ,5)=Y*10000+M*100+D2
- 1410 NEXT ZJ
- 1420 REM CALCULATE OUTFLOWS FOR EXPENSES
- 1421 REM **************************************************************
- 1430 FOR ZJ= 1 TO 25
- 1440 READ X$
- 1450 IF E0(ZJ,1)=0 THEN 1530
- 1460 IF INT(E0(ZJ,2))>D4 THEN 1530
- 1470 A2(1)=E0(ZJ,1)
- 1480 A2(2)=E0(ZJ,2)
- 1490 GOSUB 1790
- 1500 LPRINT USING "\ \ ## &";A$; D1; X$;
- 1510 LPRINT TAB(50):LPRINT USING PU$;-1*A2(1)
- 1520 E0(ZJ,2)=(E0(ZJ,2)-INT(E0(ZJ,2)))+Y*10000+M*100+D2
- 1530 NEXT ZJ
- 1540 D1=D1+1
- 1550 D4=Y1*10000+M1*100+D1
- 1560 M=M1
- 1570 D2=D1
- 1580 Y=Y1
- 1590 GOSUB 3070
- 1600 NEXT ZK1
- 1610 D3=1
- 1620 D2=D(M1)
- 1630 M=M1
- 1640 Y=Y1
- 1650 GOSUB 2930
- 1660 D1=D
- 1670 M1=M
- 1680 Y1=Y
- 1690 GOSUB 3070
- 1700 D4=Y1*10000+M1*100+D1
- 1710 LPRINT TAB(18) "CASH IN: ";:LPRINT USING PU$; I1;
- 1720 LPRINT TAB(41) "CASH OUT: ";:LPRINT USING PU$; E1;
- 1730 LPRINT
- 1731 REM ******************************************************************
- 1732 REM ** EXPERIMENT WITH AUTOMATIC PRINT OF MONTHLY CHARTS TO YEAR END **
- 1733 IF JJJ = Y1 THEN 900
- 1734 IF JJJ = Y1 - 1 THEN 3450
- 1735 JJJ = Y1: GOTO 900
- 1736 REM ***SHOULD EXPERIMENT FAIL...REMOVE 1732 - 1736 ***
- 1737 REM ******************************************************************
- 1738 REM ***THEN RESTORE 1739 - 1770 BY REMOVING `REM' HEADING ***
- 1739 REM LPRINT"DO YOU WANT TO SEE THE NEXT MONTH (Y/N) ";
- 1740 REM PRINT "DO YOU WANT TO SEE THE NEXT MONTH (Y/N) ";
- 1750 REM INPUT X0$:LPRINT X0$
- 1760 REM IF X0$="Y" OR X0$="y" THEN 900
- 1770 REM IF X0$="N" OR X0$="n" THEN 3450
- 1780 GOTO 1740
- 1790 REM APPLY EXPENSES
- 1791 REM ***************************************************
- 1800 X0$=" "
- 1810 IF B0-A2(1)>=0 THEN 2060
- 1820 LPRINT
- 1830 PRINT" CASH NEEDED FOR: ";X$;:PRINT USING PU$; A2(1);
- 1831 LPRINT" CASH NEEDED FOR: ";X$;:LPRINT USING PU$; A2(1);
- 1840 PRINT " ON HAND: ";:PRINT USING PU$;B0
- 1841 LPRINT " ON HAND: ";:LPRINT USING PU$; B0
- 1850 LPRINT
- 1860 PRINT" ENTER D=DELAY EXPENSE ";
- 1861 LPRINT"ENTER D=DELAY EXPENSE ";
- 1870 PRINT" or C=USE CREDIT CARD";
- 1871 LPRINT" or C=USE CREDIT CARD";
- 1880 INPUT X0$:LPRINT X0$
- 1890 IF X0$="D" OR X0$="d" THEN 2130
- 1900 IF X0$<>"C" AND X0$<>"c" THEN 1860
- 1910 IF C4=1 THEN X0=1: GOTO 1960
- 1920 PRINT "CREDIT CARD NUMBER (1-";C4;"OR ZERO) ";
- 1921 LPRINT"CREDIT CARD NUMBER (1-";C4;"OR ZERO) ";
- 1930 INPUT X0:LPRINT X0
- 1940 IF X0<1 THEN 1860
- 1950 IF X0>C4 THEN 1920
- 1960 IF C1(X0,2)+A2(1)<=C1(X0,3) THEN 2000
- 1970 PRINT "AVAILABLE ";C1$(X0);" CREDIT:";
- 1971 LPRINT "AVAILABLE ";C1$(X0);" CREDIT:";
- 1980 PRINT USING PU$; C1(X0,3)-C1(X0,2)
- 1981 LPRINT USING PU$; C1(X0,3)-C1(X0,2)
- 1990 GOTO 1920
- 2000 C1(X0,2)=C1(X0,2)+A2(1)
- 2010 ZK=X0
- 2020 X0$="1"
- 2030 GOSUB 2310
- 2040 X0$=" "
- 2050 GOTO 2070
- 2060 B0=B0-A2(1)
- 2070 E1=E1+A2(1)
- 2080 D3=INT((A2(2)-INT(A2(2)))*100+.5)
- 2090 Y=INT(A2(2)/10000)
- 2100 M=INT((A2(2)-Y*10000)/100)
- 2110 D2=INT((A2(2)-(Y*10000+M*100)))
- 2120 REM CALCULATE NEXT DATE
- 2121 REM *******************************************************
- 2130 GOSUB 2680
- 2140 IF X0$<>"D" AND X0$<>"d" THEN 2160
- 2150 PRINT USING "EXPENSE IS DELAYED UNTIL ##/##/##"; M, D2, Y
- 2151 LPRINT USING "EXPENSE IS DELAYED UNTIL ##/##/##"; M, D2, Y
- 2160 RETURN
- 2170 REM ROUTINE TO ENTER CREDIT & AND CHARGE CARD DATA
- 2171 REM ****************************************************
- 2175 LPRINT
- 2180 PRINT USING "NAME OF CREDIT CARD ## (RETURN TO END)"; ZK;
- 2181 LPRINT USING "NAME OF CREDIT CARD ## (RETURN TO END)"; ZK;
- 2190 INPUT C1$(ZK):LPRINT C1$(ZK)
- 2200 IF C1$(ZK)<="" THEN 2520
- 2210 PRINT SPC(18)"ANNUAL INTEREST RATE";
- 2211 LPRINT SPC(18)"ANNUAL INTEREST RATE";
- 2220 INPUT C1(ZK,1):LPRINT C1(ZK,1)
- 2230 IF C1(ZK,1)<0 THEN 2170
- 2240 PRINT SPC(23)"CURRENT BALANCE";
- 2241 LPRINT SPC(23)"CURRENT BALANCE";
- 2250 INPUT C1(ZK,2): LPRINT C1(ZK,2)
- 2260 IF C1(ZK,2)<0 THEN 2210
- 2270 PRINT SPC(26)"CREDIT LIMIT";
- 2271 LPRINT SPC(26)"CREDIT LIMIT";
- 2280 INPUT C1(ZK,3):LPRINT C1(ZK,3)
- 2290 IF C1(ZK,3)<0 THEN 2240
- 2300 IF C1(ZK,1)=0 THEN 2460
- 2310 C1(ZK,4)=INT(.1*C1(ZK,2)*100+.5)/100
- 2320 IP=C1(ZK,1)/100
- 2330 P1=C1(ZK,2)
- 2340 A1=C1(ZK,4)
- 2350 IF P1<=0 THEN 2460
- 2360 GOSUB 3410
- 2370 PRINT A1;" PAYMENTS OF ";:PRINT USING PU$; C1(ZK,4);
- 2371 LPRINT A1;" PAYMENTS OF ";:LPRINT USING PU$;C1(ZK,4);
- 2380 PRINT " NEEDED TO PAY DEBT"
- 2381 LPRINT " NEEDED TO PAY DEBT"
- 2390 PRINT SPC(19)"CHANGE AMOUNT (Y/N)";
- 2391 LPRINT SPC(19)"CHANGE AMOUNT (Y/N)";
- 2400 INPUT X1$:LPRINT X1$
- 2410 PRINT
- 2411 LPRINT
- 2420 IF X1$<>"Y" AND X1$<>"y" THEN 2460
- 2430 PRINT SPC(10)"ENTER DESIRED PAYMENT AMOUNT";
- 2431 LPRINT SPC(10)"ENTER DESIRED PAYMENT AMOUNT";
- 2440 INPUT C1(ZK,4):LPRINT C1(ZK,4)
- 2450 GOTO 2330
- 2460 IF X0$="1" THEN 2520
- 2470 PRINT" ENTER NEXT ";C1$(ZK);" BILLING DATE:"
- 2471 LPRINT" ENTER NEXT ";C1$(ZK);" BILLING DATE:"
- 2480 A2(2)=0
- 2490 GOSUB 2640
- 2500 IF X1=-1 THEN 2270
- 2510 C1(ZK,5)=A2(2)
- 2520 RETURN
- 2530 REM ROUTINE TO CALCULATE EXPENSE FREQUENCIES
- 2531 REM ******************************************************************
- 2540 REM A2() ARRAY CONTAINS RESULTS
- 2541 REM ******************************************************************
- 2550 PRINT TAB(19-LEN(X$))"PERIODIC AMOUNT FOR ";X$;
- 2551 LPRINT TAB(19-LEN(X$))"PERIODIC AMOUNT FOR ";X$;
- 2560 INPUT A2(1):LPRINT A2(1)
- 2570 IF A2(1)<=0 THEN 2670
- 2580 PRINT SPC(15)"HOW MANY TIMES PER YEAR";
- 2581 LPRINT SPC(15)"HOW MANY TIMES PER YEAR";
- 2590 INPUT A2(2):LPRINT A2(2)
- 2600 IF A2(2)<=0 THEN 2550
- 2610 IF A2(2)<100 THEN 2640
- 2620 PRINT "FREQUENCY CANNOT EXCEED 99 DAYS"
- 2621 LPRINT "FREQUENCY CANNOT EXCEED 99 DAYS"
- 2630 GOTO 2580
- 2640 GOSUB 3180
- 2650 IF X1=-1 THEN 2670
- 2660 A2(2)=A2(2)/100+Y*10000+M*100+D2
- 2670 RETURN
- 2680 REM FIND NEXT MONTHLY, BI-MONTHLY
- 2690 REM OR QUARTERLY OCCURENCE
- 2691 REM ********************************************************************
- 2700 IF 24/D3<>INT(24/D3) THEN 2920
- 2710 IF D3=24 THEN 2800
- 2720 FOR ZK=1 TO 12/D3
- 2730 M=M+1
- 2740 IF M<=12 THEN 2770
- 2750 M=1
- 2760 Y=Y+1
- 2770 NEXT ZK
- 2780 RETURN
- 2790 REM CALCULATE NEXT SEMI-MONTHLY OCCURENCE
- 2791 REM *********************************************************************
- 2800 IF D2<>D(M) OR D2<>1 THEN 2830
- 2810 D2=15
- 2820 GOTO 2870
- 2830 IF D2>D(M) THEN 2860
- 2840 D2=D2+15
- 2850 RETURN
- 2860 D2=D2-15
- 2870 M=M+1
- 2880 IF M<=12 THEN 2910
- 2890 Y=Y+1
- 2900 M=1
- 2910 RETURN
- 2920 D3=INT(365.25/D3)
- 2930 REM CALCULATE A DAY D3 DAYS FROM M/D2/Y
- 2931 REM *********************************************************************
- 2940 IF D2+D3<=D(M) THEN 3050
- 2950 D3=D3-(D(M)-D2)
- 2960 D2=0
- 2970 M=M+1
- 2980 IF M<=12 THEN 2940
- 2990 Y=Y+1
- 3000 M=1
- 3010 D(2)=28
- 3020 IF Y/4<>INT(Y/4) THEN 3040
- 3030 D(2)=29
- 3040 GOTO 2940
- 3050 D2=D2+D3
- 3060 RETURN
- 3070 REM SUBROUTINE TO CALCULATE DAY OF WEEK
- 3071 REM **********************************************************************
- 3080 IF Y>1900 THEN 3100
- 3090 Y=Y+1900
- 3100 IF M>2 THEN 3130
- 3110 M=M+12
- 3120 Y=Y-1
- 3130 A=D2+2*M+INT(.6*(M+1))+Y+INT(Y/4)
- 3140 N=A-INT(Y/100)+INT(Y/400)+2
- 3150 N=N MOD 7
- 3160 A$=MID$(D$,(N*3)+1,3)
- 3170 RETURN
- 3180 REM ROUTINE TO ENTER DATE
- 3181 REM *********************************************************************
- 3190 REM DATE IS PASSED BACK IN M,D2, AND Y
- 3200 D(2)=28
- 3210 PRINT SPC(9)"ENTER MONTH-DAY-YEAR (mmddyy)";
- 3211 LPRINT SPC(9)"ENTER MONTH-DAY-YEAR (mmddyy)";
- 3220 INPUT X1: LPRINT X1
- 3230 IF X1=0 THEN 3340
- 3240 IF X1=-1 THEN 3370
- 3250 M=INT(X1/10000!)
- 3260 IF M>12 OR M<1 THEN 3210
- 3270 Y=INT((X1/100-INT(X1/100))*100+.5)
- 3280 IF Y/4<>INT(Y/4) THEN 3300
- 3290 D(2)=29
- 3300 D2=INT((X1-(M*10000!+Y))/100)
- 3310 IF D2<1 THEN 3210
- 3320 IF D2>D(M) THEN 3210
- 3330 GOTO 3370
- 3340 M=M1
- 3350 D2=D1
- 3360 Y=Y1
- 3370 RETURN
- 3380 REM SUBROUTINE TO DETERMINE TERM OF LOAN
- 3390 REM IP=INTEREST RATE, P1=PRINCIPAL, A1=PAYMENT AMOUNT
- 3400 REM ******************************************************************
- 3410 A=LOG(1+(IP/12)*12)
- 3420 A1=-(LOG(1-(P1*IP)/(12*A1))/A)
- 3430 A1=INT(A1*12+.5)
- 3440 RETURN
- 3450 LPRINT SPC(6) " CLOSING CASH BALANCE ";TAB(37): LPRINT USING PU$;B0
- 3460 LPRINT CHR$(12)
- 3470 LPRINT CHR$(12): END